package cn.com.nes.site.service.project.handler;

import cn.com.nes.mybatis.agent.system.entity.TUser;
import cn.com.nes.site.service.project.bo.QueryInstallWorkAreaBO;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.util.ObjectUtil;
import org.springframework.stereotype.Component;

import java.util.Set;
import java.util.stream.Collectors;

/**
 * 不使用项目uuid的行政区划处理器
 */
@Component("workAreaHandlerNotUseProjectUuid")
public class WorkAreaHandlerNotUseProjectUuid extends WorkAreaHandler {

    @Override
    public Set<String> queryInstallWorkArea(QueryInstallWorkAreaBO queryBO) throws Exception {
        Set<String> areaCodeSet = super.queryInstallWorkArea(queryBO);

        // 判断是否需要以个人维度查询行政区划代码
        if (queryBO.getWhetherItIsUseProjectUuid()) {
            return handleReturn(queryBO, areaCodeSet);
        }

        // 查询当前登录人的全部处理中安装工单的行政区划集合
        // 查询当前登陆人关联的全部长效管护用户id
        Set<Long> callCenterUserIdSet = systemUserService.getUsers(queryBO.getEasyRepairUserId())
                .stream()
                .map(TUser::getCallCenterUserId)
                .collect(Collectors.toSet());
        if (CollectionUtil.isEmpty(callCenterUserIdSet)) {
            return handleReturn(queryBO, areaCodeSet);
        }

        // 根据处理人id获取安装工单的行政区划代码集合
        Set<String> workOrderAreaCodeSet = workOrderService.getAreaCodeSetByMaintainIds(callCenterUserIdSet);
        areaCodeSet.addAll(workOrderAreaCodeSet);

        return handleReturn(queryBO, areaCodeSet);
    }

    private Set<String> handleReturn(QueryInstallWorkAreaBO queryBO, Set<String> areaCodeSet) throws Exception {
        // 判断是否继续向后执行
        if (ObjectUtil.isNotNull(this.getSuccessor())) {
            queryBO.setAreaCodeSet(areaCodeSet);
            return this.getSuccessor().queryInstallWorkArea(queryBO);
        }
        return areaCodeSet;
    }
}
